/**
 * @Copyright:Copyright (c) 2007 - 2023
 * 
 */
package com.tengtong.duang.sql.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.tengtong.commons.lang.RegexUtils;
import com.tengtong.commons.lang.StringUtils;

/**
 * 一些工具
 *
 * @author lin_jinming
 * @since: v1.0
 */
public class SqlUtils {
    
    private final static Pattern BAD_WORD_PATTERN = Pattern.compile("\\b(and|exec|insert|select|drop|grant|alter|delete|update|count|chr|mid|master|truncate|char|declare|or)\\b|(\\*|;|\\+|'|%)");

    /**
     * 包含一些破坏性的语句或关键字，则返回 true
     *
     * @param text
     * @return
     */
    public final static boolean containsSqlBadWord(String text) {
        Matcher matcher = BAD_WORD_PATTERN.matcher(text.toLowerCase());
        return matcher.find();
    }
    
    /**
     * 对 orderby 的内容进行合法性检查，非法者就返回 false
     *
     * @param text
     */
    public final static boolean checkOrderBy(String text) {
        if(StringUtils.notEmpty(text)) {
            String[] words = text.split(",|\s");
            for(var w: words) {
                if(!RegexUtils.isKeyword(w)) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }
    
    /**
     * group 字段
     *
     * @param text
     * @return
     */
    public final static boolean checkGroupBy(String text) {
        if(StringUtils.notEmpty(text)) {
            String[] words = StringUtils.splitByComma(text);
            for(var w: words){
                if(!RegexUtils.isKeyword(w)) {
                    return false;
                }
            }
            
            return true;
        }
        return false;
    }
}
